{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Models\n",
    "The following classification models are carried out here:\n",
    "    1. Random Forest\n",
    "    2. Nested Logit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n",
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:519: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:520: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n",
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:541: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:542: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:543: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:544: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:545: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:550: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import geopandas as gpd\n",
    "import shapely\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "import collections\n",
    "import sklearn\n",
    "import sklearn.preprocessing\n",
    "import sklearn.model_selection\n",
    "import sklearn.ensemble\n",
    "import eli5\n",
    "from eli5.sklearn import PermutationImportance\n",
    "from sklearn.feature_selection import SelectFromModel\n",
    "\n",
    "# oversampling\n",
    "from imblearn.over_sampling import SMOTENC\n",
    "from imblearn.under_sampling import RandomUnderSampler\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. Load in data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_16 = pd.read_csv('../../Data/model_inputs/gdf_2016_X.csv')\n",
    "y_16 = pd.read_csv('../../Data/model_inputs/gdf_2016_y.csv')\n",
    "X_17 = pd.read_csv('../../Data/model_inputs/gdf_2017_X.csv')\n",
    "y_17 = pd.read_csv('../../Data/model_inputs/gdf_2017_y.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['id_trip', 'mode', 'duration', 'distance_m', 'weekday', 'precip',\n",
       "       'temp', 'morning', 'midday', 'afternoon', 'evening', 'midnight',\n",
       "       'startx', 'starty', 'endx', 'endy'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_17.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "changing booleans to numbers\n"
     ]
    }
   ],
   "source": [
    "def boolean_to_num(row):\n",
    "    if row:\n",
    "        return 1\n",
    "    else:\n",
    "        return 0\n",
    "if not type(X_16['morning'][0]) == np.int64:\n",
    "    print('changing booleans to numbers')\n",
    "    for col in ['morning','midday','afternoon','evening','midnight']:\n",
    "        X_16[col] = X_16[col].apply(boolean_to_num)\n",
    "        X_17[col] = X_17[col].apply(boolean_to_num)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Dependent variable class sizes\n",
    "Purpose: {'leisure': 0, 'food_drink': 1, 'shops': 2, 'pick_up_drop_off': 3, 'education': 4, 'health': 5}\n",
    "Mode: {'walking': 0, 'public_transport': 1, 'car': 2, 'cycling': 3, 'public_transport, car': 4, 'other': 5}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dependent variable class sizes 2016:\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0    7430\n",
       "1    5790\n",
       "2    5682\n",
       "3    2473\n",
       "4    2262\n",
       "5    2168\n",
       "Name: purpose, dtype: int64"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print('Dependent variable class sizes 2016:')\n",
    "y_16['purpose'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dependent variable class sizes 2017:\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0    8049\n",
       "2    7723\n",
       "1    2714\n",
       "4    2175\n",
       "3    1379\n",
       "5     908\n",
       "Name: purpose, dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print('Dependent variable class sizes 2017:')\n",
    "y_17['purpose'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x132603160>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax, fig = plt.subplots(1, figsize=(12,6))\n",
    "sns.heatmap(X_16.corr(), cmap='Blues', annot=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. Setup model\n",
    "#### Section Overview:\n",
    "2.1  Split data into training and testing  \n",
    "2.2  Calculate p_nearby\n",
    "2.3  Remove trip ID's from train/test data  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "combined_X = pd.concat([X_16, X_17],axis=0)\n",
    "combined_y = pd.concat([y_16, y_17],axis=0)\n",
    "combined_X.reset_index(drop=True, inplace=True)\n",
    "combined_y.reset_index(drop=True, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "67583      1\n",
       "3196210    1\n",
       "2379075    1\n",
       "23873      1\n",
       "2598206    1\n",
       "          ..\n",
       "3488209    1\n",
       "2013826    1\n",
       "3580545    1\n",
       "2271872    1\n",
       "466134     1\n",
       "Name: id_trip, Length: 48753, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# check for no duplicates\n",
    "combined_X.id_trip.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    15479\n",
       "2    13405\n",
       "1     8504\n",
       "4     4437\n",
       "3     3852\n",
       "5     3076\n",
       "Name: purpose, dtype: int64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# check for no duplicates\n",
    "combined_y.purpose.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# define main data\n",
    "all_X = combined_X.copy()\n",
    "all_y = combined_y.copy()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 Split data into training and testing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def normalise(X, to_normalize):\n",
    "    \"\"\"\n",
    "        Feature scaling method.\n",
    "        Normalises an array between 0–1 using the Z-score\n",
    "        (i - min) / (max - min)\n",
    "    \"\"\"\n",
    "    for col in X.columns[to_normalize]:\n",
    "        row_min = X[col].min()\n",
    "        row_max = X[col].max()\n",
    "        X[col] = X[col].apply(lambda row: (row - row_min)/(row_max - row_min))\n",
    "    return X\n",
    "    \n",
    "\n",
    "def model_setup(X, y, test_size=0.2, norm=False, to_normalise=[]):\n",
    "    \"\"\"\n",
    "        All operations needed for preparing the model inputs.\n",
    "        Can apply normalisation and then will apply the train/test split\n",
    "    \"\"\"\n",
    "    if norm:\n",
    "        X = normalise(X, to_normalise)\n",
    "    X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, test_size=test_size,\\\n",
    "                                                                                random_state=42, stratify=y)\n",
    "    return X_train, X_test, y_train, y_test    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### IMPORTANT\n",
    "Train Test Split for encoded and non-encoded"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "non_categorical_features = [False,False,True,True,False,True,True,False,False,False,\\\n",
    "                            False,False,False,False,False,False]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['duration', 'distance_m', 'precip', 'temp'], dtype='object')"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_X.columns[non_categorical_features]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Train Test Split\n",
    "X_train, X_test, y_train, y_test  = model_setup(all_X, all_y, norm=True, test_size=0.2, to_normalise=non_categorical_features)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id_trip</th>\n",
       "      <th>mode</th>\n",
       "      <th>duration</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>precip</th>\n",
       "      <th>temp</th>\n",
       "      <th>morning</th>\n",
       "      <th>midday</th>\n",
       "      <th>afternoon</th>\n",
       "      <th>evening</th>\n",
       "      <th>midnight</th>\n",
       "      <th>startx</th>\n",
       "      <th>starty</th>\n",
       "      <th>endx</th>\n",
       "      <th>endy</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>48712</th>\n",
       "      <td>316719</td>\n",
       "      <td>1</td>\n",
       "      <td>0.007893</td>\n",
       "      <td>0.000655</td>\n",
       "      <td>1</td>\n",
       "      <td>0.002444</td>\n",
       "      <td>0.520335</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>7.630894e+06</td>\n",
       "      <td>1.243008e+06</td>\n",
       "      <td>7.630849e+06</td>\n",
       "      <td>1.242902e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15325</th>\n",
       "      <td>2852730</td>\n",
       "      <td>2</td>\n",
       "      <td>0.051776</td>\n",
       "      <td>0.076705</td>\n",
       "      <td>1</td>\n",
       "      <td>0.332443</td>\n",
       "      <td>0.350559</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.629201e+06</td>\n",
       "      <td>1.268842e+06</td>\n",
       "      <td>7.631172e+06</td>\n",
       "      <td>1.263133e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18117</th>\n",
       "      <td>1469140</td>\n",
       "      <td>2</td>\n",
       "      <td>0.096974</td>\n",
       "      <td>0.089656</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.249493</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.634582e+06</td>\n",
       "      <td>1.240677e+06</td>\n",
       "      <td>7.632900e+06</td>\n",
       "      <td>1.239433e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16141</th>\n",
       "      <td>1683057</td>\n",
       "      <td>2</td>\n",
       "      <td>0.162188</td>\n",
       "      <td>0.323123</td>\n",
       "      <td>0</td>\n",
       "      <td>0.074497</td>\n",
       "      <td>0.347599</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.608962e+06</td>\n",
       "      <td>1.231110e+06</td>\n",
       "      <td>7.633275e+06</td>\n",
       "      <td>1.240897e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24414</th>\n",
       "      <td>3033147</td>\n",
       "      <td>3</td>\n",
       "      <td>0.063710</td>\n",
       "      <td>0.022974</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.530318</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.631254e+06</td>\n",
       "      <td>1.244462e+06</td>\n",
       "      <td>7.631379e+06</td>\n",
       "      <td>1.242380e+06</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       id_trip  mode  duration  distance_m  weekday    precip      temp  \\\n",
       "48712   316719     1  0.007893    0.000655        1  0.002444  0.520335   \n",
       "15325  2852730     2  0.051776    0.076705        1  0.332443  0.350559   \n",
       "18117  1469140     2  0.096974    0.089656        1  0.000000  0.249493   \n",
       "16141  1683057     2  0.162188    0.323123        0  0.074497  0.347599   \n",
       "24414  3033147     3  0.063710    0.022974        1  0.000000  0.530318   \n",
       "\n",
       "       morning  midday  afternoon  evening  midnight        startx  \\\n",
       "48712        0       0          0        0         1  7.630894e+06   \n",
       "15325        0       0          1        0         0  7.629201e+06   \n",
       "18117        0       1          0        0         0  7.634582e+06   \n",
       "16141        0       1          0        0         0  7.608962e+06   \n",
       "24414        0       0          0        1         0  7.631254e+06   \n",
       "\n",
       "             starty          endx          endy  \n",
       "48712  1.243008e+06  7.630849e+06  1.242902e+06  \n",
       "15325  1.268842e+06  7.631172e+06  1.263133e+06  \n",
       "18117  1.240677e+06  7.632900e+06  1.239433e+06  \n",
       "16141  1.231110e+06  7.633275e+06  1.240897e+06  \n",
       "24414  1.244462e+06  7.631379e+06  1.242380e+06  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.2 Calculate p_nearby\n",
    "Proportion of other trips that ended nearby with a given purpose\n",
    "\n",
    "Purpose: {'leisure': 0, 'food_drink': 1, 'shops': 2, 'pick_up_drop_off': 3, 'education': 4, 'health': 5}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# initialise the geo dataframes needed\n",
    "all_X['geometry'] = all_X.apply(lambda row: shapely.geometry.Point(row['endx'],row['endy']),axis=1)\n",
    "geo_df = gpd.GeoDataFrame(pd.concat([all_X,all_y],axis=1))\n",
    "geo_df.crs = {'init':'epsg:3347'} # Canada Lambert Projection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# only purposes of points around training are known  \n",
    "all_train = pd.concat([X_train,pd.DataFrame(y_train, columns=['purpose'])],axis=1)\n",
    "geo_X_train = all_train.copy()\n",
    "geo_X_train.reset_index(drop=True,inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "geo_X_train['geometry'] = geo_X_train.apply(lambda row: shapely.geometry.Point(row['endx'],row['endy']),axis=1)\n",
    "geo_df_train = gpd.GeoDataFrame(geo_X_train)\n",
    "geo_df_train.crs = {'init':'epsg:3347'}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x13a056da0>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "geo_df_train.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# calculate 200 m buffers around each trip end point\n",
    "geo_df['buffers'] = geo_df['geometry'].apply(lambda row: row.buffer(200))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get dataframe with only buffers and purposes\n",
    "all_buffers = geo_df[['id_trip','buffers','purpose']]\n",
    "geo_df.drop('buffers',axis=1,inplace=True)\n",
    "all_buffers = gpd.GeoDataFrame(all_buffers.rename(columns={'buffers':'geometry'}))\n",
    "all_buffers.crs = {'init': 'epsg:3347'}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 29.6 s, sys: 2.28 s, total: 31.9 s\n",
      "Wall time: 32.6 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "joined_data = gpd.sjoin(all_buffers, geo_df_train, op='intersects', how='left')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2641755\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id_trip_left</th>\n",
       "      <th>geometry</th>\n",
       "      <th>purpose_left</th>\n",
       "      <th>index_right</th>\n",
       "      <th>id_trip_right</th>\n",
       "      <th>mode</th>\n",
       "      <th>duration</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>precip</th>\n",
       "      <th>...</th>\n",
       "      <th>morning</th>\n",
       "      <th>midday</th>\n",
       "      <th>afternoon</th>\n",
       "      <th>evening</th>\n",
       "      <th>midnight</th>\n",
       "      <th>startx</th>\n",
       "      <th>starty</th>\n",
       "      <th>endx</th>\n",
       "      <th>endy</th>\n",
       "      <th>purpose_right</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>48752</th>\n",
       "      <td>333364</td>\n",
       "      <td>POLYGON ((7614336.832987056 1237383.977932147,...</td>\n",
       "      <td>2</td>\n",
       "      <td>25526.0</td>\n",
       "      <td>2209132.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.100357</td>\n",
       "      <td>0.025408</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.221659</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.615460e+06</td>\n",
       "      <td>1.238870e+06</td>\n",
       "      <td>7.614135e+06</td>\n",
       "      <td>1.237383e+06</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48752</th>\n",
       "      <td>333364</td>\n",
       "      <td>POLYGON ((7614336.832987056 1237383.977932147,...</td>\n",
       "      <td>2</td>\n",
       "      <td>7019.0</td>\n",
       "      <td>2048905.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.012028</td>\n",
       "      <td>0.006100</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.023530</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.614512e+06</td>\n",
       "      <td>1.237863e+06</td>\n",
       "      <td>7.614135e+06</td>\n",
       "      <td>1.237383e+06</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48752</th>\n",
       "      <td>333364</td>\n",
       "      <td>POLYGON ((7614336.832987056 1237383.977932147,...</td>\n",
       "      <td>2</td>\n",
       "      <td>26823.0</td>\n",
       "      <td>90668.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.210581</td>\n",
       "      <td>0.115760</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.070195</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>7.609558e+06</td>\n",
       "      <td>1.233488e+06</td>\n",
       "      <td>7.614137e+06</td>\n",
       "      <td>1.237384e+06</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48752</th>\n",
       "      <td>333364</td>\n",
       "      <td>POLYGON ((7614336.832987056 1237383.977932147,...</td>\n",
       "      <td>2</td>\n",
       "      <td>33648.0</td>\n",
       "      <td>27836.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.220259</td>\n",
       "      <td>0.340667</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.003005</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>7.639030e+06</td>\n",
       "      <td>1.244346e+06</td>\n",
       "      <td>7.614137e+06</td>\n",
       "      <td>1.237384e+06</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48752</th>\n",
       "      <td>333364</td>\n",
       "      <td>POLYGON ((7614336.832987056 1237383.977932147,...</td>\n",
       "      <td>2</td>\n",
       "      <td>28534.0</td>\n",
       "      <td>333364.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.123191</td>\n",
       "      <td>0.010132</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.002444</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>7.614347e+06</td>\n",
       "      <td>1.237996e+06</td>\n",
       "      <td>7.614137e+06</td>\n",
       "      <td>1.237384e+06</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       id_trip_left                                           geometry  \\\n",
       "48752        333364  POLYGON ((7614336.832987056 1237383.977932147,...   \n",
       "48752        333364  POLYGON ((7614336.832987056 1237383.977932147,...   \n",
       "48752        333364  POLYGON ((7614336.832987056 1237383.977932147,...   \n",
       "48752        333364  POLYGON ((7614336.832987056 1237383.977932147,...   \n",
       "48752        333364  POLYGON ((7614336.832987056 1237383.977932147,...   \n",
       "\n",
       "       purpose_left  index_right  id_trip_right  mode  duration  distance_m  \\\n",
       "48752             2      25526.0      2209132.0   2.0  0.100357    0.025408   \n",
       "48752             2       7019.0      2048905.0   3.0  0.012028    0.006100   \n",
       "48752             2      26823.0        90668.0   2.0  0.210581    0.115760   \n",
       "48752             2      33648.0        27836.0   2.0  0.220259    0.340667   \n",
       "48752             2      28534.0       333364.0   0.0  0.123191    0.010132   \n",
       "\n",
       "       weekday    precip  ...  morning  midday  afternoon  evening  midnight  \\\n",
       "48752      1.0  0.221659  ...      0.0     0.0        0.0      1.0       0.0   \n",
       "48752      1.0  0.023530  ...      0.0     1.0        0.0      0.0       0.0   \n",
       "48752      0.0  0.070195  ...      0.0     0.0        0.0      0.0       1.0   \n",
       "48752      1.0  0.003005  ...      0.0     0.0        0.0      0.0       1.0   \n",
       "48752      1.0  0.002444  ...      0.0     0.0        0.0      0.0       1.0   \n",
       "\n",
       "             startx        starty          endx          endy  purpose_right  \n",
       "48752  7.615460e+06  1.238870e+06  7.614135e+06  1.237383e+06            4.0  \n",
       "48752  7.614512e+06  1.237863e+06  7.614135e+06  1.237383e+06            0.0  \n",
       "48752  7.609558e+06  1.233488e+06  7.614137e+06  1.237384e+06            0.0  \n",
       "48752  7.639030e+06  1.244346e+06  7.614137e+06  1.237384e+06            0.0  \n",
       "48752  7.614347e+06  1.237996e+06  7.614137e+06  1.237384e+06            2.0  \n",
       "\n",
       "[5 rows x 21 columns]"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(len(joined_data))\n",
    "joined_data.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 51.6 s, sys: 84.3 ms, total: 51.7 s\n",
      "Wall time: 51.9 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "to_drop = joined_data[['id_trip_left','id_trip_right']].apply(lambda row: True \\\n",
    "                                                                if row['id_trip_left'] == row['id_trip_right']\\\n",
    "                                                                else False, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    False\n",
       "0    False\n",
       "0    False\n",
       "0    False\n",
       "0    False\n",
       "dtype: bool"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "to_drop[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get rid of duplicate trips\n",
    "joined_data = joined_data[~to_drop]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id_trip_left</th>\n",
       "      <th>geometry</th>\n",
       "      <th>purpose_left</th>\n",
       "      <th>index_right</th>\n",
       "      <th>id_trip_right</th>\n",
       "      <th>mode</th>\n",
       "      <th>duration</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>precip</th>\n",
       "      <th>...</th>\n",
       "      <th>morning</th>\n",
       "      <th>midday</th>\n",
       "      <th>afternoon</th>\n",
       "      <th>evening</th>\n",
       "      <th>midnight</th>\n",
       "      <th>startx</th>\n",
       "      <th>starty</th>\n",
       "      <th>endx</th>\n",
       "      <th>endy</th>\n",
       "      <th>purpose_right</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>21325</th>\n",
       "      <td>2386427</td>\n",
       "      <td>POLYGON ((7617980.68002283 1251490.953635346, ...</td>\n",
       "      <td>2</td>\n",
       "      <td>3050.0</td>\n",
       "      <td>7311.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.137286</td>\n",
       "      <td>0.170948</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.627867e+06</td>\n",
       "      <td>1.248470e+06</td>\n",
       "      <td>7.617872e+06</td>\n",
       "      <td>1.251486e+06</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       id_trip_left                                           geometry  \\\n",
       "21325       2386427  POLYGON ((7617980.68002283 1251490.953635346, ...   \n",
       "\n",
       "       purpose_left  index_right  id_trip_right  mode  duration  distance_m  \\\n",
       "21325             2       3050.0         7311.0   2.0  0.137286    0.170948   \n",
       "\n",
       "       weekday  precip  ...  morning  midday  afternoon  evening  midnight  \\\n",
       "21325      0.0     0.0  ...      0.0     1.0        0.0      0.0       0.0   \n",
       "\n",
       "             startx        starty          endx          endy  purpose_right  \n",
       "21325  7.627867e+06  1.248470e+06  7.617872e+06  1.251486e+06            5.0  \n",
       "\n",
       "[1 rows x 21 columns]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# see if duplicates have been dropped (check if more than one trip ID shows)\n",
    "joined_data.loc[joined_data['id_trip_left'] == 2386427]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "grouped_data = joined_data.groupby(['id_trip_left', 'purpose_right']).agg({'mode':'count'})\n",
    "grouped_data = grouped_data.unstack().apply(lambda row: row/row.sum(),axis=1)['mode'].reset_index()\n",
    "grouped_data = grouped_data.fillna(0.0)\n",
    "# rename columns\n",
    "grouped_data.columns = ['id_trip','p_nearby_leisure','p_nearby_food','p_nearby_shops','p_nearby_pickup','p_nearby_education',\\\n",
    "                       'p_nearby_health']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "num of trips without other trips around: 2064\n"
     ]
    }
   ],
   "source": [
    "print('num of trips without other trips around:', all_X['id_trip'].nunique() - grouped_data['id_trip'].nunique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id_trip</th>\n",
       "      <th>p_nearby_leisure</th>\n",
       "      <th>p_nearby_food</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "      <th>p_nearby_health</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7</td>\n",
       "      <td>0.241667</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>0.300000</td>\n",
       "      <td>0.025000</td>\n",
       "      <td>0.150000</td>\n",
       "      <td>0.033333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>21</td>\n",
       "      <td>0.390244</td>\n",
       "      <td>0.097561</td>\n",
       "      <td>0.292683</td>\n",
       "      <td>0.146341</td>\n",
       "      <td>0.024390</td>\n",
       "      <td>0.048780</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>67</td>\n",
       "      <td>0.071429</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.571429</td>\n",
       "      <td>0.214286</td>\n",
       "      <td>0.071429</td>\n",
       "      <td>0.071429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>86</td>\n",
       "      <td>0.234694</td>\n",
       "      <td>0.193878</td>\n",
       "      <td>0.346939</td>\n",
       "      <td>0.102041</td>\n",
       "      <td>0.030612</td>\n",
       "      <td>0.091837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>115</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.312500</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>0.062500</td>\n",
       "      <td>0.125000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id_trip  p_nearby_leisure  p_nearby_food  p_nearby_shops  p_nearby_pickup  \\\n",
       "0        7          0.241667       0.250000        0.300000         0.025000   \n",
       "1       21          0.390244       0.097561        0.292683         0.146341   \n",
       "2       67          0.071429       0.000000        0.571429         0.214286   \n",
       "3       86          0.234694       0.193878        0.346939         0.102041   \n",
       "4      115          0.250000       0.000000        0.312500         0.250000   \n",
       "\n",
       "   p_nearby_education  p_nearby_health  \n",
       "0            0.150000         0.033333  \n",
       "1            0.024390         0.048780  \n",
       "2            0.071429         0.071429  \n",
       "3            0.030612         0.091837  \n",
       "4            0.062500         0.125000  "
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "merging\n"
     ]
    }
   ],
   "source": [
    "# join the data back to the all_X\n",
    "if not 'p_nearby_leisure' in all_X.columns:\n",
    "    print('merging')\n",
    "    all_X = all_X.merge(grouped_data, on='id_trip', how='left')\n",
    "    all_X = all_X.fillna(0.0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "removing geometry\n"
     ]
    }
   ],
   "source": [
    "if 'geometry' in all_X.columns:\n",
    "    print('removing geometry')\n",
    "    all_X.drop('geometry', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id_trip</th>\n",
       "      <th>mode</th>\n",
       "      <th>duration</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>precip</th>\n",
       "      <th>temp</th>\n",
       "      <th>morning</th>\n",
       "      <th>midday</th>\n",
       "      <th>afternoon</th>\n",
       "      <th>...</th>\n",
       "      <th>startx</th>\n",
       "      <th>starty</th>\n",
       "      <th>endx</th>\n",
       "      <th>endy</th>\n",
       "      <th>p_nearby_leisure</th>\n",
       "      <th>p_nearby_food</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "      <th>p_nearby_health</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1889461</td>\n",
       "      <td>1</td>\n",
       "      <td>0.036365</td>\n",
       "      <td>0.017995</td>\n",
       "      <td>1</td>\n",
       "      <td>0.004090</td>\n",
       "      <td>0.893262</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>7.632056e+06</td>\n",
       "      <td>1.247584e+06</td>\n",
       "      <td>7.630298e+06</td>\n",
       "      <td>1.248129e+06</td>\n",
       "      <td>0.445455</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.363636</td>\n",
       "      <td>0.027273</td>\n",
       "      <td>0.018182</td>\n",
       "      <td>0.045455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2071991</td>\n",
       "      <td>3</td>\n",
       "      <td>0.073670</td>\n",
       "      <td>0.027212</td>\n",
       "      <td>1</td>\n",
       "      <td>0.043444</td>\n",
       "      <td>0.870440</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>7.628002e+06</td>\n",
       "      <td>1.247761e+06</td>\n",
       "      <td>7.626230e+06</td>\n",
       "      <td>1.247150e+06</td>\n",
       "      <td>0.642857</td>\n",
       "      <td>0.071429</td>\n",
       "      <td>0.035714</td>\n",
       "      <td>0.071429</td>\n",
       "      <td>0.071429</td>\n",
       "      <td>0.107143</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   id_trip  mode  duration  distance_m  weekday    precip      temp  morning  \\\n",
       "0  1889461     1  0.036365    0.017995        1  0.004090  0.893262        0   \n",
       "1  2071991     3  0.073670    0.027212        1  0.043444  0.870440        0   \n",
       "\n",
       "   midday  afternoon  ...        startx        starty          endx  \\\n",
       "0       0          0  ...  7.632056e+06  1.247584e+06  7.630298e+06   \n",
       "1       0          0  ...  7.628002e+06  1.247761e+06  7.626230e+06   \n",
       "\n",
       "           endy  p_nearby_leisure  p_nearby_food  p_nearby_shops  \\\n",
       "0  1.248129e+06          0.445455       0.100000        0.363636   \n",
       "1  1.247150e+06          0.642857       0.071429        0.035714   \n",
       "\n",
       "   p_nearby_pickup  p_nearby_education  p_nearby_health  \n",
       "0         0.027273            0.018182         0.045455  \n",
       "1         0.071429            0.071429         0.107143  \n",
       "\n",
       "[2 rows x 22 columns]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_X.head(2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2.1 re-join the props back to train test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "merging data\n"
     ]
    }
   ],
   "source": [
    "if not 'p_nearby_leisure' in X_train.columns:\n",
    "    print('merging data')\n",
    "    col_to_merge = ['id_trip', 'p_nearby_leisure','p_nearby_food','p_nearby_shops',\\\n",
    "                        'p_nearby_pickup','p_nearby_education','p_nearby_health']\n",
    "    X_train = X_train.merge(all_X[col_to_merge], on='id_trip')\n",
    "    X_test = X_test.merge(all_X[col_to_merge], on='id_trip')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id_trip</th>\n",
       "      <th>mode</th>\n",
       "      <th>duration</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>precip</th>\n",
       "      <th>temp</th>\n",
       "      <th>morning</th>\n",
       "      <th>midday</th>\n",
       "      <th>afternoon</th>\n",
       "      <th>...</th>\n",
       "      <th>startx</th>\n",
       "      <th>starty</th>\n",
       "      <th>endx</th>\n",
       "      <th>endy</th>\n",
       "      <th>p_nearby_leisure</th>\n",
       "      <th>p_nearby_food</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "      <th>p_nearby_health</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>316719</td>\n",
       "      <td>1</td>\n",
       "      <td>0.007893</td>\n",
       "      <td>0.000655</td>\n",
       "      <td>1</td>\n",
       "      <td>0.002444</td>\n",
       "      <td>0.520335</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>7.630894e+06</td>\n",
       "      <td>1.243008e+06</td>\n",
       "      <td>7.630849e+06</td>\n",
       "      <td>1.242902e+06</td>\n",
       "      <td>0.267857</td>\n",
       "      <td>0.178571</td>\n",
       "      <td>0.375000</td>\n",
       "      <td>0.026786</td>\n",
       "      <td>0.125000</td>\n",
       "      <td>0.026786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2852730</td>\n",
       "      <td>2</td>\n",
       "      <td>0.051776</td>\n",
       "      <td>0.076705</td>\n",
       "      <td>1</td>\n",
       "      <td>0.332443</td>\n",
       "      <td>0.350559</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>7.629201e+06</td>\n",
       "      <td>1.268842e+06</td>\n",
       "      <td>7.631172e+06</td>\n",
       "      <td>1.263133e+06</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1469140</td>\n",
       "      <td>2</td>\n",
       "      <td>0.096974</td>\n",
       "      <td>0.089656</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.249493</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>7.634582e+06</td>\n",
       "      <td>1.240677e+06</td>\n",
       "      <td>7.632900e+06</td>\n",
       "      <td>1.239433e+06</td>\n",
       "      <td>0.125000</td>\n",
       "      <td>0.187500</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>0.041667</td>\n",
       "      <td>0.062500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1683057</td>\n",
       "      <td>2</td>\n",
       "      <td>0.162188</td>\n",
       "      <td>0.323123</td>\n",
       "      <td>0</td>\n",
       "      <td>0.074497</td>\n",
       "      <td>0.347599</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>7.608962e+06</td>\n",
       "      <td>1.231110e+06</td>\n",
       "      <td>7.633275e+06</td>\n",
       "      <td>1.240897e+06</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.222222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3033147</td>\n",
       "      <td>3</td>\n",
       "      <td>0.063710</td>\n",
       "      <td>0.022974</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.530318</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>7.631254e+06</td>\n",
       "      <td>1.244462e+06</td>\n",
       "      <td>7.631379e+06</td>\n",
       "      <td>1.242380e+06</td>\n",
       "      <td>0.452830</td>\n",
       "      <td>0.075472</td>\n",
       "      <td>0.264151</td>\n",
       "      <td>0.094340</td>\n",
       "      <td>0.075472</td>\n",
       "      <td>0.037736</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   id_trip  mode  duration  distance_m  weekday    precip      temp  morning  \\\n",
       "0   316719     1  0.007893    0.000655        1  0.002444  0.520335        0   \n",
       "1  2852730     2  0.051776    0.076705        1  0.332443  0.350559        0   \n",
       "2  1469140     2  0.096974    0.089656        1  0.000000  0.249493        0   \n",
       "3  1683057     2  0.162188    0.323123        0  0.074497  0.347599        0   \n",
       "4  3033147     3  0.063710    0.022974        1  0.000000  0.530318        0   \n",
       "\n",
       "   midday  afternoon  ...        startx        starty          endx  \\\n",
       "0       0          0  ...  7.630894e+06  1.243008e+06  7.630849e+06   \n",
       "1       0          1  ...  7.629201e+06  1.268842e+06  7.631172e+06   \n",
       "2       1          0  ...  7.634582e+06  1.240677e+06  7.632900e+06   \n",
       "3       1          0  ...  7.608962e+06  1.231110e+06  7.633275e+06   \n",
       "4       0          0  ...  7.631254e+06  1.244462e+06  7.631379e+06   \n",
       "\n",
       "           endy  p_nearby_leisure  p_nearby_food  p_nearby_shops  \\\n",
       "0  1.242902e+06          0.267857       0.178571        0.375000   \n",
       "1  1.263133e+06          0.500000       0.000000        0.000000   \n",
       "2  1.239433e+06          0.125000       0.187500        0.333333   \n",
       "3  1.240897e+06          0.666667       0.000000        0.000000   \n",
       "4  1.242380e+06          0.452830       0.075472        0.264151   \n",
       "\n",
       "   p_nearby_pickup  p_nearby_education  p_nearby_health  \n",
       "0         0.026786            0.125000         0.026786  \n",
       "1         0.500000            0.000000         0.000000  \n",
       "2         0.250000            0.041667         0.062500  \n",
       "3         0.111111            0.000000         0.222222  \n",
       "4         0.094340            0.075472         0.037736  \n",
       "\n",
       "[5 rows x 22 columns]"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id_trip</th>\n",
       "      <th>mode</th>\n",
       "      <th>duration</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>precip</th>\n",
       "      <th>temp</th>\n",
       "      <th>morning</th>\n",
       "      <th>midday</th>\n",
       "      <th>afternoon</th>\n",
       "      <th>...</th>\n",
       "      <th>startx</th>\n",
       "      <th>starty</th>\n",
       "      <th>endx</th>\n",
       "      <th>endy</th>\n",
       "      <th>p_nearby_leisure</th>\n",
       "      <th>p_nearby_food</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "      <th>p_nearby_health</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1947761</td>\n",
       "      <td>2</td>\n",
       "      <td>0.102518</td>\n",
       "      <td>0.072997</td>\n",
       "      <td>0</td>\n",
       "      <td>0.491615</td>\n",
       "      <td>0.420780</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>7.636855e+06</td>\n",
       "      <td>1.245546e+06</td>\n",
       "      <td>7.632738e+06</td>\n",
       "      <td>1.245562e+06</td>\n",
       "      <td>0.55814</td>\n",
       "      <td>0.232558</td>\n",
       "      <td>0.162791</td>\n",
       "      <td>0.011628</td>\n",
       "      <td>0.034884</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2902552</td>\n",
       "      <td>1</td>\n",
       "      <td>0.041534</td>\n",
       "      <td>0.003192</td>\n",
       "      <td>1</td>\n",
       "      <td>0.042009</td>\n",
       "      <td>0.482297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>7.632273e+06</td>\n",
       "      <td>1.245756e+06</td>\n",
       "      <td>7.632511e+06</td>\n",
       "      <td>1.245758e+06</td>\n",
       "      <td>0.40000</td>\n",
       "      <td>0.233333</td>\n",
       "      <td>0.266667</td>\n",
       "      <td>0.033333</td>\n",
       "      <td>0.016667</td>\n",
       "      <td>0.050000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1493889</td>\n",
       "      <td>1</td>\n",
       "      <td>0.039466</td>\n",
       "      <td>0.004427</td>\n",
       "      <td>0</td>\n",
       "      <td>0.050967</td>\n",
       "      <td>0.424149</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>7.629285e+06</td>\n",
       "      <td>1.246925e+06</td>\n",
       "      <td>7.629183e+06</td>\n",
       "      <td>1.246519e+06</td>\n",
       "      <td>0.40625</td>\n",
       "      <td>0.187500</td>\n",
       "      <td>0.218750</td>\n",
       "      <td>0.093750</td>\n",
       "      <td>0.015625</td>\n",
       "      <td>0.078125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>106384</td>\n",
       "      <td>0</td>\n",
       "      <td>0.222515</td>\n",
       "      <td>0.011503</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000106</td>\n",
       "      <td>0.554968</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>7.628099e+06</td>\n",
       "      <td>1.241570e+06</td>\n",
       "      <td>7.627338e+06</td>\n",
       "      <td>1.242050e+06</td>\n",
       "      <td>0.30000</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3100505</td>\n",
       "      <td>2</td>\n",
       "      <td>0.224018</td>\n",
       "      <td>0.144418</td>\n",
       "      <td>1</td>\n",
       "      <td>0.018937</td>\n",
       "      <td>0.333150</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>7.627381e+06</td>\n",
       "      <td>1.244144e+06</td>\n",
       "      <td>7.636303e+06</td>\n",
       "      <td>1.255194e+06</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   id_trip  mode  duration  distance_m  weekday    precip      temp  morning  \\\n",
       "0  1947761     2  0.102518    0.072997        0  0.491615  0.420780        0   \n",
       "1  2902552     1  0.041534    0.003192        1  0.042009  0.482297        0   \n",
       "2  1493889     1  0.039466    0.004427        0  0.050967  0.424149        0   \n",
       "3   106384     0  0.222515    0.011503        1  0.000106  0.554968        0   \n",
       "4  3100505     2  0.224018    0.144418        1  0.018937  0.333150        0   \n",
       "\n",
       "   midday  afternoon  ...        startx        starty          endx  \\\n",
       "0       0          0  ...  7.636855e+06  1.245546e+06  7.632738e+06   \n",
       "1       1          0  ...  7.632273e+06  1.245756e+06  7.632511e+06   \n",
       "2       0          0  ...  7.629285e+06  1.246925e+06  7.629183e+06   \n",
       "3       0          0  ...  7.628099e+06  1.241570e+06  7.627338e+06   \n",
       "4       0          1  ...  7.627381e+06  1.244144e+06  7.636303e+06   \n",
       "\n",
       "           endy  p_nearby_leisure  p_nearby_food  p_nearby_shops  \\\n",
       "0  1.245562e+06           0.55814       0.232558        0.162791   \n",
       "1  1.245758e+06           0.40000       0.233333        0.266667   \n",
       "2  1.246519e+06           0.40625       0.187500        0.218750   \n",
       "3  1.242050e+06           0.30000       0.100000        0.200000   \n",
       "4  1.255194e+06           0.00000       1.000000        0.000000   \n",
       "\n",
       "   p_nearby_pickup  p_nearby_education  p_nearby_health  \n",
       "0         0.011628            0.034884         0.000000  \n",
       "1         0.033333            0.016667         0.050000  \n",
       "2         0.093750            0.015625         0.078125  \n",
       "3         0.100000            0.200000         0.100000  \n",
       "4         0.000000            0.000000         0.000000  \n",
       "\n",
       "[5 rows x 22 columns]"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3  Remove trip ID's and coords\n",
    "...as these are not needed for the analysis, but are used later to identify trips and do oversampling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "# keep coords\n",
    "X_train_coords = X_train[['id_trip','startx','starty','endx','endy']]\n",
    "X_test_coords = X_test[['id_trip','startx','starty','endx','endy']]\n",
    "\n",
    "# drop unneeded features\n",
    "X_train = X_train.drop(['startx','starty','endx','endy'],axis=1)\n",
    "X_test = X_test.drop(['startx','starty','endx','endy'],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "# keep training ids\n",
    "training_ids = X_train['id_trip'].copy()\n",
    "X_train = X_train.drop('id_trip', axis=1)\n",
    "testing_ids = X_test['id_trip'].copy()\n",
    "X_test = X_test.drop('id_trip', axis=1)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['mode', 'duration', 'distance_m', 'weekday', 'precip', 'temp',\n",
       "       'morning', 'midday', 'afternoon', 'evening', 'midnight',\n",
       "       'p_nearby_leisure', 'p_nearby_food', 'p_nearby_shops',\n",
       "       'p_nearby_pickup', 'p_nearby_education', 'p_nearby_health'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "## flatten data i.e. from Pd.Series to np.array\n",
    "y_train = np.ravel(y_train)\n",
    "y_test = np.ravel(y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "all_features:\n",
      "\n",
      " ['mode', 'duration', 'distance_m', 'weekday', 'precip', 'temp', 'morning', 'midday', 'afternoon', 'evening', 'midnight', 'p_nearby_leisure', 'p_nearby_food', 'p_nearby_shops', 'p_nearby_pickup', 'p_nearby_education', 'p_nearby_health']\n"
     ]
    }
   ],
   "source": [
    "feature_list = list(X_train.columns)\n",
    "print('all_features:\\n\\n', feature_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['mode', 'duration', 'distance_m', 'weekday', 'precip', 'temp',\n",
       "       'morning', 'midday', 'afternoon', 'evening', 'midnight',\n",
       "       'p_nearby_leisure', 'p_nearby_food', 'p_nearby_shops',\n",
       "       'p_nearby_pickup', 'p_nearby_education', 'p_nearby_health'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "# needed for CV scores\n",
    "reduced_X = all_X.copy()\n",
    "reduced_X = reduced_X.drop(['id_trip','startx','starty','endx','endy'],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "scrolled": false
   },
   "source": [
    "# 3. Begin Modelling\n",
    "#### Section Overview:\n",
    "3.1 Define model functions and test modelling   \n",
    "3.2 Preliminary modelling for important feature extraction  \n",
    "3.3 Re-run models  \n",
    "\n",
    "#### Model functions:\n",
    "- `run_rf` == run the random forest classification model.\n",
    "- `run_logit` == run the nested classification model.\n",
    "\n",
    "#### Notes:\n",
    "\n",
    "#### Technical Notes:\n",
    "- each model will have a cross-validation option. To use this the function parameters will need to be set to `cv=True` and `cv_val` to the number of k-folds defaulting to `cv_val=10`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1 Define model functions and test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "# All Model functions\n",
    "def run_rf(X_train, X_test, y_train, y_test, n_estimators=128):\n",
    "    \"\"\"\n",
    "        Run a random forest classification model with option to use cross-validation\n",
    "    \"\"\"\n",
    "    clf = sklearn.ensemble.RandomForestClassifier(n_estimators=n_estimators)\n",
    "    clf.fit(X_train, y_train)\n",
    "    score = clf.score(X_test,y_test)\n",
    "    preds = clf.predict(X_test)\n",
    "    print(\"Random Forest Classifcation accuracy:\", score)\n",
    "    return clf, score, preds\n",
    "\n",
    "def shuffle_data(X,y):\n",
    "    shuffled_data = pd.concat([X, y],axis=1)\n",
    "    shuffled_data = sklearn.utils.shuffle(shuffled_data)\n",
    "    shuffled_data = shuffled_data.reset_index(drop=True)\n",
    "    shuffled_X = shuffled_data[shuffled_data.columns[shuffled_data.columns != 'purpose']]\n",
    "    shuffled_y = shuffled_data[['purpose']]\n",
    "    return shuffled_X, shuffled_y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3.1.1 test models"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Random Forest Classifcation accuracy: 0.5242539226745975\n",
      "CPU times: user 11.1 s, sys: 162 ms, total: 11.2 s\n",
      "Wall time: 11.2 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "rf_clf, rf_score, rf_preds = run_rf(X_train, X_test, y_train, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "shuffled_X, shuffled_y = shuffle_data(reduced_X,all_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mode</th>\n",
       "      <th>duration</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>precip</th>\n",
       "      <th>temp</th>\n",
       "      <th>morning</th>\n",
       "      <th>midday</th>\n",
       "      <th>afternoon</th>\n",
       "      <th>evening</th>\n",
       "      <th>midnight</th>\n",
       "      <th>p_nearby_leisure</th>\n",
       "      <th>p_nearby_food</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "      <th>p_nearby_health</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>0.170457</td>\n",
       "      <td>0.076390</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0.415172</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.375000</td>\n",
       "      <td>0.375000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0.369198</td>\n",
       "      <td>0.477715</td>\n",
       "      <td>1</td>\n",
       "      <td>0.132855</td>\n",
       "      <td>0.656392</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0.102988</td>\n",
       "      <td>0.054698</td>\n",
       "      <td>1</td>\n",
       "      <td>0.017823</td>\n",
       "      <td>0.311924</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.190476</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.380952</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.047619</td>\n",
       "      <td>0.095238</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>0.024713</td>\n",
       "      <td>0.013777</td>\n",
       "      <td>1</td>\n",
       "      <td>0.013295</td>\n",
       "      <td>0.807537</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0.071321</td>\n",
       "      <td>0.002830</td>\n",
       "      <td>1</td>\n",
       "      <td>0.001062</td>\n",
       "      <td>0.989615</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.269663</td>\n",
       "      <td>0.258427</td>\n",
       "      <td>0.292135</td>\n",
       "      <td>0.067416</td>\n",
       "      <td>0.044944</td>\n",
       "      <td>0.067416</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   mode  duration  distance_m  weekday    precip      temp  morning  midday  \\\n",
       "0     2  0.170457    0.076390        0  0.000031  0.415172        0       0   \n",
       "1     2  0.369198    0.477715        1  0.132855  0.656392        0       0   \n",
       "2     1  0.102988    0.054698        1  0.017823  0.311924        1       0   \n",
       "3     2  0.024713    0.013777        1  0.013295  0.807537        0       0   \n",
       "4     0  0.071321    0.002830        1  0.001062  0.989615        0       0   \n",
       "\n",
       "   afternoon  evening  midnight  p_nearby_leisure  p_nearby_food  \\\n",
       "0          1        0         0          0.375000       0.375000   \n",
       "1          1        0         0          1.000000       0.000000   \n",
       "2          0        0         0          0.190476       0.285714   \n",
       "3          0        0         1          0.750000       0.250000   \n",
       "4          0        1         0          0.269663       0.258427   \n",
       "\n",
       "   p_nearby_shops  p_nearby_pickup  p_nearby_education  p_nearby_health  \n",
       "0        0.000000         0.250000            0.000000         0.000000  \n",
       "1        0.000000         0.000000            0.000000         0.000000  \n",
       "2        0.380952         0.000000            0.047619         0.095238  \n",
       "3        0.000000         0.000000            0.000000         0.000000  \n",
       "4        0.292135         0.067416            0.044944         0.067416  "
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "shuffled_X.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "predictions for each class by RF: Counter({0: 4161, 2: 3051, 1: 1230, 4: 765, 5: 279, 3: 265}) \n",
      "\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.52      0.70      0.60      3096\n",
      "           1       0.46      0.33      0.39      1701\n",
      "           2       0.52      0.59      0.56      2681\n",
      "           3       0.42      0.14      0.21       770\n",
      "           4       0.70      0.60      0.64       888\n",
      "           5       0.52      0.24      0.32       615\n",
      "\n",
      "    accuracy                           0.52      9751\n",
      "   macro avg       0.52      0.43      0.45      9751\n",
      "weighted avg       0.52      0.52      0.51      9751\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print('predictions for each class by RF:', collections.Counter(rf_preds), '\\n')\n",
    "# {'leisure': 0, 'food_drink': 1, 'shops': 2,\n",
    "# 'pick_up_drop_off': 3, 'education': 4, 'health': 5}\n",
    "print(sklearn.metrics.classification_report(y_test, rf_preds))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 52.9 s, sys: 1.04 s, total: 53.9 s\n",
      "Wall time: 54 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "rf_cv_scores = sklearn.model_selection.cross_val_score(rf_clf,shuffled_X, np.ravel(shuffled_y), cv=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.52312109, 0.53219852, 0.53107692, 0.52707692, 0.53118588])"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf_cv_scores"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2 Subset data by feature importance metric"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "def feature_selection(model, X_train, X_test, y_train, y_test, threshold):\n",
    "    model.fit(X_train, y_train)\n",
    "    print(\"model score before feature extraction: \", model.score(X_test, y_test))\n",
    "    perm = PermutationImportance(model).fit(X_test, y_test)\n",
    "    \n",
    "    \n",
    "    # perm.feature_importances_ attribute is now available, it can be used\n",
    "    # for feature selection - let's e.g. select features which increase\n",
    "    # accuracy by at least 0.01:\n",
    "    X_train_subset = X_train[X_train.columns[perm.feature_importances_ > threshold]]\n",
    "    X_test_subset = X_test[X_test.columns[perm.feature_importances_ > threshold]]\n",
    "    \n",
    "    return model, X_train_subset, X_test_subset, perm\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.5209722079786688\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Index(['mode', 'distance_m', 'weekday', 'precip', 'temp', 'midnight',\n",
       "       'p_nearby_leisure', 'p_nearby_food', 'p_nearby_shops',\n",
       "       'p_nearby_pickup', 'p_nearby_education'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## EXAMPLE OF USE\n",
    "clf = sklearn.ensemble.RandomForestClassifier(n_estimators=128, n_jobs=-1)\n",
    "\n",
    "clf.fit(X_train, y_train)\n",
    "print(clf.score(X_test, y_test))\n",
    "perm = PermutationImportance(clf).fit(X_test, y_test)\n",
    "# perm.feature_importances_ attribute is now available, it can be used\n",
    "# for feature selection - let's e.g. select features which increase\n",
    "# accuracy by at least 0.01:\n",
    "sel = SelectFromModel(perm, threshold=0.01, prefit=True)\n",
    "X_test.columns[perm.feature_importances_ > 0.01]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "model score before feature extraction:  0.5214849758999077\n",
      "CPU times: user 1min 6s, sys: 2.03 s, total: 1min 8s\n",
      "Wall time: 23.6 s\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "    <style>\n",
       "    table.eli5-weights tr:hover {\n",
       "        filter: brightness(85%);\n",
       "    }\n",
       "</style>\n",
       "\n",
       "\n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "        <table class=\"eli5-weights eli5-feature-importances\" style=\"border-collapse: collapse; border: none; margin-top: 0em; table-layout: auto;\">\n",
       "    <thead>\n",
       "    <tr style=\"border: none;\">\n",
       "        <th style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">Weight</th>\n",
       "        <th style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">Feature</th>\n",
       "    </tr>\n",
       "    </thead>\n",
       "    <tbody>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 80.00%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0558\n",
       "                \n",
       "                    &plusmn; 0.0069\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x13\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 80.33%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0545\n",
       "                \n",
       "                    &plusmn; 0.0057\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x0\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 83.30%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0432\n",
       "                \n",
       "                    &plusmn; 0.0038\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x15\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 86.82%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0308\n",
       "                \n",
       "                    &plusmn; 0.0029\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x5\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 87.42%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0288\n",
       "                \n",
       "                    &plusmn; 0.0032\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x3\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 87.85%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0274\n",
       "                \n",
       "                    &plusmn; 0.0064\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x10\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 89.81%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0213\n",
       "                \n",
       "                    &plusmn; 0.0042\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x11\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 91.74%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0158\n",
       "                \n",
       "                    &plusmn; 0.0035\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x2\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 92.57%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0136\n",
       "                \n",
       "                    &plusmn; 0.0024\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x12\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 93.12%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0122\n",
       "                \n",
       "                    &plusmn; 0.0031\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x14\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 94.16%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0096\n",
       "                \n",
       "                    &plusmn; 0.0024\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x16\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 94.34%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0092\n",
       "                \n",
       "                    &plusmn; 0.0026\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x4\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 95.15%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0074\n",
       "                \n",
       "                    &plusmn; 0.0013\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x6\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 95.97%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0057\n",
       "                \n",
       "                    &plusmn; 0.0010\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x7\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 96.59%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0045\n",
       "                \n",
       "                    &plusmn; 0.0052\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x1\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 96.66%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0043\n",
       "                \n",
       "                    &plusmn; 0.0036\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x9\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 97.62%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0027\n",
       "                \n",
       "                    &plusmn; 0.0019\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                x8\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "    \n",
       "    </tbody>\n",
       "</table>\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "clf = sklearn.ensemble.RandomForestClassifier(n_estimators=128, n_jobs=-1)\n",
    "clf, X_train_subset, X_test_subset, perm = feature_selection(clf, X_train, X_test, y_train, y_test,threshold=0.01)\n",
    "eli5.show_weights(perm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "important columns:\n",
      " Index(['mode', 'temp', 'midnight', 'weekday', 'p_nearby_education',\n",
      "       'distance_m', 'p_nearby_shops', 'precip'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "print('important columns:\\n',X_test.columns[[0,5,10,3,15,2,13,4]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mode</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>temp</th>\n",
       "      <th>midnight</th>\n",
       "      <th>p_nearby_leisure</th>\n",
       "      <th>p_nearby_food</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.000655</td>\n",
       "      <td>1</td>\n",
       "      <td>0.520335</td>\n",
       "      <td>1</td>\n",
       "      <td>0.267857</td>\n",
       "      <td>0.178571</td>\n",
       "      <td>0.375000</td>\n",
       "      <td>0.026786</td>\n",
       "      <td>0.125000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0.076705</td>\n",
       "      <td>1</td>\n",
       "      <td>0.350559</td>\n",
       "      <td>0</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>0.089656</td>\n",
       "      <td>1</td>\n",
       "      <td>0.249493</td>\n",
       "      <td>0</td>\n",
       "      <td>0.125000</td>\n",
       "      <td>0.187500</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>0.041667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>0.323123</td>\n",
       "      <td>0</td>\n",
       "      <td>0.347599</td>\n",
       "      <td>0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3</td>\n",
       "      <td>0.022974</td>\n",
       "      <td>1</td>\n",
       "      <td>0.530318</td>\n",
       "      <td>0</td>\n",
       "      <td>0.452830</td>\n",
       "      <td>0.075472</td>\n",
       "      <td>0.264151</td>\n",
       "      <td>0.094340</td>\n",
       "      <td>0.075472</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   mode  distance_m  weekday      temp  midnight  p_nearby_leisure  \\\n",
       "0     1    0.000655        1  0.520335         1          0.267857   \n",
       "1     2    0.076705        1  0.350559         0          0.500000   \n",
       "2     2    0.089656        1  0.249493         0          0.125000   \n",
       "3     2    0.323123        0  0.347599         0          0.666667   \n",
       "4     3    0.022974        1  0.530318         0          0.452830   \n",
       "\n",
       "   p_nearby_food  p_nearby_shops  p_nearby_pickup  p_nearby_education  \n",
       "0       0.178571        0.375000         0.026786            0.125000  \n",
       "1       0.000000        0.000000         0.500000            0.000000  \n",
       "2       0.187500        0.333333         0.250000            0.041667  \n",
       "3       0.000000        0.000000         0.111111            0.000000  \n",
       "4       0.075472        0.264151         0.094340            0.075472  "
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train_subset.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "sel = SelectFromModel(perm, threshold=0.01, prefit=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "subset_shuffled_X = sel.transform(shuffled_X)\n",
    "subset_shuffled_X = pd.DataFrame(subset_shuffled_X, columns=X_train_subset.columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mode</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>temp</th>\n",
       "      <th>midnight</th>\n",
       "      <th>p_nearby_leisure</th>\n",
       "      <th>p_nearby_food</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>0.07639</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.415172</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.375</td>\n",
       "      <td>0.375</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.25</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   mode  distance_m  weekday      temp  midnight  p_nearby_leisure  \\\n",
       "0   2.0     0.07639      0.0  0.415172       0.0             0.375   \n",
       "\n",
       "   p_nearby_food  p_nearby_shops  p_nearby_pickup  p_nearby_education  \n",
       "0          0.375             0.0             0.25                 0.0  "
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "subset_shuffled_X.head(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "## re-shuffle\n",
    "subset_shuffled_X, shuffled_y = shuffle_data(subset_shuffled_X, shuffled_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mode</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>temp</th>\n",
       "      <th>midnight</th>\n",
       "      <th>p_nearby_leisure</th>\n",
       "      <th>p_nearby_food</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>0.062739</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.673873</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.140351</td>\n",
       "      <td>0.298246</td>\n",
       "      <td>0.438596</td>\n",
       "      <td>0.052632</td>\n",
       "      <td>0.017544</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   mode  distance_m  weekday      temp  midnight  p_nearby_leisure  \\\n",
       "0   2.0    0.062739      1.0  0.673873       0.0          0.140351   \n",
       "\n",
       "   p_nearby_food  p_nearby_shops  p_nearby_pickup  p_nearby_education  \n",
       "0       0.298246        0.438596         0.052632            0.017544  "
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "subset_shuffled_X.head(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3 Re-build the models with new subset data\n",
    "\n",
    "#### Note:\n",
    "\n",
    "purpose = {'leisure': 0, 'food_drink': 1, 'shops': 2, 'pick_up_drop_off': 3, 'education': 4, 'health': 5}  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Random Forest Classifcation accuracy: 0.4922572043892934\n"
     ]
    }
   ],
   "source": [
    "rf_clf, rf_score, rf_preds = run_rf(X_train_subset, X_test_subset, y_train, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "predictions for each class by RF: Counter({0: 4116, 2: 2910, 1: 1333, 4: 756, 3: 331, 5: 305}) \n",
      "\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.50      0.67      0.57      3096\n",
      "           1       0.40      0.31      0.35      1701\n",
      "           2       0.50      0.54      0.52      2681\n",
      "           3       0.34      0.15      0.21       770\n",
      "           4       0.67      0.57      0.61       888\n",
      "           5       0.42      0.21      0.28       615\n",
      "\n",
      "    accuracy                           0.49      9751\n",
      "   macro avg       0.47      0.41      0.42      9751\n",
      "weighted avg       0.48      0.49      0.48      9751\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print('predictions for each class by RF:', collections.Counter(rf_preds), '\\n')\n",
    "# {'leisure': 0, 'food_drink': 1, 'shops': 2,\n",
    "# 'pick_up_drop_off': 3, 'education': 4, 'health': 5}\n",
    "print(sklearn.metrics.classification_report(y_test, rf_preds))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 48.9 s, sys: 1.21 s, total: 50.1 s\n",
      "Wall time: 51.3 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "rf_cv_scores = sklearn.model_selection.cross_val_score(rf_clf,subset_shuffled_X, np.ravel(shuffled_y), cv=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.52445401, 0.52522559, 0.52164103, 0.52492308, 0.52267132])"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf_cv_scores"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4 Improve models\n",
    "### Overview:\n",
    "4.1 Encode model inputs (for ANN/SVC)   \n",
    "4.2 Re-run models with encoded inputs  \n",
    "4.3 Oversample  \n",
    "4.4 add POI categories to model  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.1 Encode model inputs\n",
    "The model inputs are encoded to improve the performance of ANN/SVC models. Specifically by One-hot encoding all the \n",
    "\n",
    "#### Encoded inputs:\n",
    "- Trip mode *(f)*\n",
    "- Cardinal Direction *(f)*\n",
    "- Trip starting & ending cluster from K-means (see `./Notebooks/preprocessing/metric_creation/clustering.ipynb`)\n",
    "- Temporal cluster from LDA\n",
    "- Land-use at trip starting and ending points *(f)* (see `./Notebooks/preprocessing/metric_creation/land_use_poi.ipynb`)\n",
    "\n",
    "*(f) == factors*\n",
    "\n",
    "#### Note:\n",
    "- for factor numbers see Data/model_inputs folder e.g. `./Data/model_inputs/gdf_2016_land_use_factors.txt`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "# for One Hot Encoded data\n",
    "enc_X_train = X_train.copy()\n",
    "enc_X_test = X_test.copy()\n",
    "enc_y_train = pd.DataFrame(y_train, columns=['purpose']).copy()\n",
    "enc_y_test = pd.DataFrame(y_test, columns=['purpose']).copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "def encode_model_inputs(data, col):\n",
    "    \"\"\"\n",
    "        function for applying a OneHotEncoder to a input feature \n",
    "    \"\"\"\n",
    "    encoded_input = ''\n",
    "    if col in data.columns:\n",
    "        encoded_input = enc.fit_transform(data[col].values.reshape(-1, 1)).toarray()\n",
    "    return encoded_input\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "enc = sklearn.preprocessing.OneHotEncoder(handle_unknown='ignore')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "encoded_inputs_train = {}\n",
    "encoded_inputs_test = {}\n",
    "for col in [\"mode\"]:\n",
    "    if col in enc_X_train.columns:\n",
    "        # 1. encode inputs\n",
    "        encoded_inputs_train[col] = encode_model_inputs(enc_X_train, col)\n",
    "        encoded_inputs_test[col] = encode_model_inputs(enc_X_test, col)\n",
    "        # 2. make a temporary df with encoded inputs and column names of format *col*_*factor*\n",
    "        col_df_train = pd.DataFrame(encoded_inputs_train[col], columns=['%s_%s' % (col, i) for i in range(encoded_inputs_train[col].shape[1])])\n",
    "        col_df_test = pd.DataFrame(encoded_inputs_test[col], columns=['%s_%s' % (col, i) for i in range(encoded_inputs_test[col].shape[1])])\n",
    "        # 3. drop column from main data so that they can be concatenated\n",
    "        enc_X_train = enc_X_train.drop(col, axis=1)\n",
    "        enc_X_test = enc_X_test.drop(col, axis=1)\n",
    "        # 4. concatenate the two data sets\n",
    "        enc_X_train = pd.concat([enc_X_train, col_df_train], axis=1)\n",
    "        enc_X_test = pd.concat([enc_X_test, col_df_test], axis=1)\n",
    "\n",
    "encoded_inputs_train['purpose'] = encode_model_inputs(enc_y_train, 'purpose')\n",
    "encoded_inputs_test['purpose'] = encode_model_inputs(enc_y_test, 'purpose')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['duration', 'distance_m', 'weekday', 'precip', 'temp', 'morning',\n",
       "       'midday', 'afternoon', 'evening', 'midnight', 'p_nearby_leisure',\n",
       "       'p_nearby_food', 'p_nearby_shops', 'p_nearby_pickup',\n",
       "       'p_nearby_education', 'p_nearby_health', 'mode_0', 'mode_1', 'mode_2',\n",
       "       'mode_3', 'mode_4', 'mode_5'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# view new data with columns following the *col*_*factor* syntax\n",
    "enc_X_train.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Applications/anaconda/envs/st-ds/lib/python3.7/site-packages/ipykernel_launcher.py:7: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
      "  import sys\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Random Forest Classifcation accuracy: 0.5256896728540662\n"
     ]
    }
   ],
   "source": [
    "rf_clf, rf_score, rf_preds = run_rf(enc_X_train, enc_X_test, enc_y_train, enc_y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "predictions for each class by RF: Counter({0: 4145, 2: 2989, 1: 1294, 4: 767, 3: 287, 5: 269}) \n",
      "\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.52      0.70      0.60      3096\n",
      "           1       0.45      0.34      0.39      1701\n",
      "           2       0.53      0.59      0.56      2681\n",
      "           3       0.44      0.16      0.24       770\n",
      "           4       0.69      0.60      0.64       888\n",
      "           5       0.55      0.24      0.33       615\n",
      "\n",
      "    accuracy                           0.53      9751\n",
      "   macro avg       0.53      0.44      0.46      9751\n",
      "weighted avg       0.52      0.53      0.51      9751\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print('predictions for each class by RF:', collections.Counter(rf_preds), '\\n')\n",
    "# {'leisure': 0, 'food_drink': 1, 'shops': 2,\n",
    "# 'pick_up_drop_off': 3, 'education': 4, 'health': 5}\n",
    "print(sklearn.metrics.classification_report(y_test, rf_preds))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "all_enc_X = pd.concat([enc_X_train,enc_X_test],axis=0).reset_index(drop=True)\n",
    "all_enc_y = pd.concat([enc_y_train, enc_y_test],axis=0).reset_index(drop=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>duration</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>precip</th>\n",
       "      <th>temp</th>\n",
       "      <th>morning</th>\n",
       "      <th>midday</th>\n",
       "      <th>afternoon</th>\n",
       "      <th>evening</th>\n",
       "      <th>midnight</th>\n",
       "      <th>...</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "      <th>p_nearby_health</th>\n",
       "      <th>mode_0</th>\n",
       "      <th>mode_1</th>\n",
       "      <th>mode_2</th>\n",
       "      <th>mode_3</th>\n",
       "      <th>mode_4</th>\n",
       "      <th>mode_5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>48748</th>\n",
       "      <td>0.072167</td>\n",
       "      <td>0.014410</td>\n",
       "      <td>1</td>\n",
       "      <td>0.031948</td>\n",
       "      <td>0.740576</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.127139</td>\n",
       "      <td>0.024450</td>\n",
       "      <td>0.459658</td>\n",
       "      <td>0.029340</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48749</th>\n",
       "      <td>0.058354</td>\n",
       "      <td>0.017206</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.596455</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.233766</td>\n",
       "      <td>0.103896</td>\n",
       "      <td>0.168831</td>\n",
       "      <td>0.064935</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48750</th>\n",
       "      <td>0.027908</td>\n",
       "      <td>0.003909</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.722194</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.307692</td>\n",
       "      <td>0.028846</td>\n",
       "      <td>0.028846</td>\n",
       "      <td>0.057692</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48751</th>\n",
       "      <td>0.066153</td>\n",
       "      <td>0.031902</td>\n",
       "      <td>0</td>\n",
       "      <td>0.033754</td>\n",
       "      <td>0.363353</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.741379</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.017241</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48752</th>\n",
       "      <td>0.084101</td>\n",
       "      <td>0.032758</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000046</td>\n",
       "      <td>0.824004</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.470588</td>\n",
       "      <td>0.058824</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.019608</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       duration  distance_m  weekday    precip      temp  morning  midday  \\\n",
       "48748  0.072167    0.014410        1  0.031948  0.740576        0       0   \n",
       "48749  0.058354    0.017206        1  0.000000  0.596455        0       1   \n",
       "48750  0.027908    0.003909        1  0.000000  0.722194        0       0   \n",
       "48751  0.066153    0.031902        0  0.033754  0.363353        0       0   \n",
       "48752  0.084101    0.032758        1  0.000046  0.824004        0       0   \n",
       "\n",
       "       afternoon  evening  midnight  ...  p_nearby_shops  p_nearby_pickup  \\\n",
       "48748          0        1         0  ...        0.127139         0.024450   \n",
       "48749          0        0         0  ...        0.233766         0.103896   \n",
       "48750          0        0         1  ...        0.307692         0.028846   \n",
       "48751          1        0         0  ...        0.741379         0.000000   \n",
       "48752          0        1         0  ...        0.470588         0.058824   \n",
       "\n",
       "       p_nearby_education  p_nearby_health  mode_0  mode_1  mode_2  mode_3  \\\n",
       "48748            0.459658         0.029340     0.0     0.0     0.0     1.0   \n",
       "48749            0.168831         0.064935     1.0     0.0     0.0     0.0   \n",
       "48750            0.028846         0.057692     0.0     0.0     0.0     1.0   \n",
       "48751            0.000000         0.017241     0.0     0.0     1.0     0.0   \n",
       "48752            0.000000         0.019608     0.0     1.0     0.0     0.0   \n",
       "\n",
       "       mode_4  mode_5  \n",
       "48748     0.0     0.0  \n",
       "48749     0.0     0.0  \n",
       "48750     0.0     0.0  \n",
       "48751     0.0     0.0  \n",
       "48752     0.0     0.0  \n",
       "\n",
       "[5 rows x 22 columns]"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_enc_X.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "shuffled_enc_X, shuffled_enc_y = shuffle_data(all_enc_X, all_enc_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>duration</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>precip</th>\n",
       "      <th>temp</th>\n",
       "      <th>morning</th>\n",
       "      <th>midday</th>\n",
       "      <th>afternoon</th>\n",
       "      <th>evening</th>\n",
       "      <th>midnight</th>\n",
       "      <th>...</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "      <th>p_nearby_health</th>\n",
       "      <th>mode_0</th>\n",
       "      <th>mode_1</th>\n",
       "      <th>mode_2</th>\n",
       "      <th>mode_3</th>\n",
       "      <th>mode_4</th>\n",
       "      <th>mode_5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>48748</th>\n",
       "      <td>0.054971</td>\n",
       "      <td>0.031619</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.455677</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48749</th>\n",
       "      <td>0.180699</td>\n",
       "      <td>0.084452</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000076</td>\n",
       "      <td>0.926494</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.551724</td>\n",
       "      <td>0.034483</td>\n",
       "      <td>0.034483</td>\n",
       "      <td>0.017241</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48750</th>\n",
       "      <td>0.007517</td>\n",
       "      <td>0.000526</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000121</td>\n",
       "      <td>0.522712</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.353846</td>\n",
       "      <td>0.123077</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.153846</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48751</th>\n",
       "      <td>0.102518</td>\n",
       "      <td>0.242623</td>\n",
       "      <td>1</td>\n",
       "      <td>0.310073</td>\n",
       "      <td>0.603927</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48752</th>\n",
       "      <td>0.007705</td>\n",
       "      <td>0.000243</td>\n",
       "      <td>1</td>\n",
       "      <td>0.012233</td>\n",
       "      <td>0.917879</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.212598</td>\n",
       "      <td>0.015748</td>\n",
       "      <td>0.488189</td>\n",
       "      <td>0.039370</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       duration  distance_m  weekday    precip      temp  morning  midday  \\\n",
       "48748  0.054971    0.031619        1  0.000000  0.455677        1       0   \n",
       "48749  0.180699    0.084452        1  0.000076  0.926494        0       0   \n",
       "48750  0.007517    0.000526        1  0.000121  0.522712        0       0   \n",
       "48751  0.102518    0.242623        1  0.310073  0.603927        0       1   \n",
       "48752  0.007705    0.000243        1  0.012233  0.917879        0       0   \n",
       "\n",
       "       afternoon  evening  midnight  ...  p_nearby_shops  p_nearby_pickup  \\\n",
       "48748          0        0         0  ...        0.000000         0.000000   \n",
       "48749          0        0         1  ...        0.551724         0.034483   \n",
       "48750          0        1         0  ...        0.353846         0.123077   \n",
       "48751          0        0         0  ...        0.000000         0.000000   \n",
       "48752          0        0         1  ...        0.212598         0.015748   \n",
       "\n",
       "       p_nearby_education  p_nearby_health  mode_0  mode_1  mode_2  mode_3  \\\n",
       "48748            0.750000         0.000000     0.0     0.0     1.0     0.0   \n",
       "48749            0.034483         0.017241     0.0     1.0     0.0     0.0   \n",
       "48750            0.000000         0.153846     1.0     0.0     0.0     0.0   \n",
       "48751            0.000000         0.000000     0.0     0.0     1.0     0.0   \n",
       "48752            0.488189         0.039370     1.0     0.0     0.0     0.0   \n",
       "\n",
       "       mode_4  mode_5  \n",
       "48748     0.0     0.0  \n",
       "48749     0.0     0.0  \n",
       "48750     0.0     0.0  \n",
       "48751     0.0     0.0  \n",
       "48752     0.0     0.0  \n",
       "\n",
       "[5 rows x 22 columns]"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "shuffled_enc_X.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "rf_cv_scores = sklearn.model_selection.cross_val_score(rf_clf,shuffled_enc_X, np.ravel(shuffled_enc_y), cv=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.52055778, 0.53353158, 0.53271795, 0.52410256, 0.53210915])"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf_cv_scores"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4.3 Oversample\n",
    "## 4.3.1 Load in data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "# define all categorical/nominal features\n",
    "categorical_features = [True,False,False,True,False,False,True,True,True,True,True,False,False,False,False]\n",
    "ros = SMOTENC(categorical_features, random_state=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_with_ID = pd.concat([pd.DataFrame(training_ids, columns=['id_trip']),X_train],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 2min 56s, sys: 8.99 s, total: 3min 5s\n",
      "Wall time: 6min 31s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "oversampled_X_train, oversampled_y_train = ros.fit_resample(X_train_with_ID, y_train)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Before:\n",
      " Counter({0: 12383, 2: 10724, 1: 6803, 4: 3549, 3: 3082, 5: 2461})\n",
      "After:\n",
      " Counter({2: 12383, 0: 12383, 5: 12383, 1: 12383, 3: 12383, 4: 12383})\n"
     ]
    }
   ],
   "source": [
    "# check if oversampling worked\n",
    "print('Before:\\n',collections.Counter(y_train))\n",
    "print('After:\\n',collections.Counter(oversampled_y_train))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [],
   "source": [
    "oversampled_X_train = pd.DataFrame(oversampled_X_train, columns=X_train_with_ID.columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id_trip</th>\n",
       "      <th>mode</th>\n",
       "      <th>duration</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>precip</th>\n",
       "      <th>temp</th>\n",
       "      <th>morning</th>\n",
       "      <th>midday</th>\n",
       "      <th>afternoon</th>\n",
       "      <th>evening</th>\n",
       "      <th>midnight</th>\n",
       "      <th>p_nearby_leisure</th>\n",
       "      <th>p_nearby_food</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "      <th>p_nearby_health</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>316719.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.007893</td>\n",
       "      <td>0.000655</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.002444</td>\n",
       "      <td>0.520335</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.267857</td>\n",
       "      <td>0.178571</td>\n",
       "      <td>0.375000</td>\n",
       "      <td>0.026786</td>\n",
       "      <td>0.125000</td>\n",
       "      <td>0.026786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2852730.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.051776</td>\n",
       "      <td>0.076705</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.332443</td>\n",
       "      <td>0.350559</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1469140.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.096974</td>\n",
       "      <td>0.089656</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.249493</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.125000</td>\n",
       "      <td>0.187500</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>0.041667</td>\n",
       "      <td>0.062500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1683057.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.162188</td>\n",
       "      <td>0.323123</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.074497</td>\n",
       "      <td>0.347599</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.222222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3033147.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.063710</td>\n",
       "      <td>0.022974</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.530318</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.452830</td>\n",
       "      <td>0.075472</td>\n",
       "      <td>0.264151</td>\n",
       "      <td>0.094340</td>\n",
       "      <td>0.075472</td>\n",
       "      <td>0.037736</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     id_trip  mode  duration  distance_m  weekday    precip      temp  \\\n",
       "0   316719.0   1.0  0.007893    0.000655      1.0  0.002444  0.520335   \n",
       "1  2852730.0   2.0  0.051776    0.076705      1.0  0.332443  0.350559   \n",
       "2  1469140.0   2.0  0.096974    0.089656      1.0  0.000000  0.249493   \n",
       "3  1683057.0   2.0  0.162188    0.323123      0.0  0.074497  0.347599   \n",
       "4  3033147.0   3.0  0.063710    0.022974      1.0  0.000000  0.530318   \n",
       "\n",
       "   morning  midday  afternoon  evening  midnight  p_nearby_leisure  \\\n",
       "0      0.0     0.0        0.0      0.0       1.0          0.267857   \n",
       "1      0.0     0.0        1.0      0.0       0.0          0.500000   \n",
       "2      0.0     1.0        0.0      0.0       0.0          0.125000   \n",
       "3      0.0     1.0        0.0      0.0       0.0          0.666667   \n",
       "4      0.0     0.0        0.0      1.0       0.0          0.452830   \n",
       "\n",
       "   p_nearby_food  p_nearby_shops  p_nearby_pickup  p_nearby_education  \\\n",
       "0       0.178571        0.375000         0.026786            0.125000   \n",
       "1       0.000000        0.000000         0.500000            0.000000   \n",
       "2       0.187500        0.333333         0.250000            0.041667   \n",
       "3       0.000000        0.000000         0.111111            0.000000   \n",
       "4       0.075472        0.264151         0.094340            0.075472   \n",
       "\n",
       "   p_nearby_health  \n",
       "0         0.026786  \n",
       "1         0.000000  \n",
       "2         0.062500  \n",
       "3         0.222222  \n",
       "4         0.037736  "
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "oversampled_X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3493115.0    73\n",
       "3550582.0    57\n",
       "3477208.0    55\n",
       "3593194.0    55\n",
       "3438890.0    55\n",
       "             ..\n",
       "108516.0      1\n",
       "3472522.0     1\n",
       "2423955.0     1\n",
       "1474127.0     1\n",
       "28672.0       1\n",
       "Name: id_trip, Length: 39002, dtype: int64"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "oversampled_X_train['id_trip'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id_trip</th>\n",
       "      <th>mode</th>\n",
       "      <th>duration</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>precip</th>\n",
       "      <th>temp</th>\n",
       "      <th>morning</th>\n",
       "      <th>midday</th>\n",
       "      <th>afternoon</th>\n",
       "      <th>evening</th>\n",
       "      <th>midnight</th>\n",
       "      <th>p_nearby_leisure</th>\n",
       "      <th>p_nearby_food</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "      <th>p_nearby_health</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>11388</th>\n",
       "      <td>3593194.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.097726</td>\n",
       "      <td>0.011529</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.063846</td>\n",
       "      <td>0.349079</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.340278</td>\n",
       "      <td>0.152778</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.048611</td>\n",
       "      <td>0.034722</td>\n",
       "      <td>0.090278</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64538</th>\n",
       "      <td>3593194.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.050582</td>\n",
       "      <td>0.009189</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.052105</td>\n",
       "      <td>0.349079</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.346873</td>\n",
       "      <td>0.184670</td>\n",
       "      <td>0.312273</td>\n",
       "      <td>0.044758</td>\n",
       "      <td>0.028868</td>\n",
       "      <td>0.082558</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64882</th>\n",
       "      <td>3593194.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.144327</td>\n",
       "      <td>0.000171</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.073915</td>\n",
       "      <td>0.349079</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.203703</td>\n",
       "      <td>0.209151</td>\n",
       "      <td>0.487691</td>\n",
       "      <td>0.029738</td>\n",
       "      <td>0.044771</td>\n",
       "      <td>0.024946</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64907</th>\n",
       "      <td>3593194.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.028544</td>\n",
       "      <td>0.006294</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.042835</td>\n",
       "      <td>0.349079</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.302346</td>\n",
       "      <td>0.203404</td>\n",
       "      <td>0.338682</td>\n",
       "      <td>0.027546</td>\n",
       "      <td>0.056626</td>\n",
       "      <td>0.071396</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65019</th>\n",
       "      <td>3593194.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.164264</td>\n",
       "      <td>0.011529</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.326641</td>\n",
       "      <td>0.433107</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.354306</td>\n",
       "      <td>0.254211</td>\n",
       "      <td>0.245280</td>\n",
       "      <td>0.048395</td>\n",
       "      <td>0.047887</td>\n",
       "      <td>0.049920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65207</th>\n",
       "      <td>3593194.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.096051</td>\n",
       "      <td>0.000171</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.344935</td>\n",
       "      <td>0.618260</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.227978</td>\n",
       "      <td>0.042069</td>\n",
       "      <td>0.634687</td>\n",
       "      <td>0.005283</td>\n",
       "      <td>0.054706</td>\n",
       "      <td>0.035277</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65605</th>\n",
       "      <td>3593194.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.094034</td>\n",
       "      <td>0.006294</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.031752</td>\n",
       "      <td>0.349079</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.441323</td>\n",
       "      <td>0.151865</td>\n",
       "      <td>0.174670</td>\n",
       "      <td>0.014745</td>\n",
       "      <td>0.129983</td>\n",
       "      <td>0.087414</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65767</th>\n",
       "      <td>3593194.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.097426</td>\n",
       "      <td>0.000171</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.114251</td>\n",
       "      <td>0.618260</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.320140</td>\n",
       "      <td>0.132926</td>\n",
       "      <td>0.387372</td>\n",
       "      <td>0.040841</td>\n",
       "      <td>0.038306</td>\n",
       "      <td>0.080415</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65884</th>\n",
       "      <td>3593194.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.026427</td>\n",
       "      <td>0.006294</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.063803</td>\n",
       "      <td>0.349079</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.290084</td>\n",
       "      <td>0.146382</td>\n",
       "      <td>0.376714</td>\n",
       "      <td>0.034290</td>\n",
       "      <td>0.067397</td>\n",
       "      <td>0.085133</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>66017</th>\n",
       "      <td>3593194.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.097855</td>\n",
       "      <td>0.006294</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.042370</td>\n",
       "      <td>0.349079</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.414942</td>\n",
       "      <td>0.144686</td>\n",
       "      <td>0.218578</td>\n",
       "      <td>0.023968</td>\n",
       "      <td>0.107915</td>\n",
       "      <td>0.089910</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         id_trip  mode  duration  distance_m  weekday    precip      temp  \\\n",
       "11388  3593194.0   1.0  0.097726    0.011529      0.0  0.063846  0.349079   \n",
       "64538  3593194.0   1.0  0.050582    0.009189      0.0  0.052105  0.349079   \n",
       "64882  3593194.0   1.0  0.144327    0.000171      0.0  0.073915  0.349079   \n",
       "64907  3593194.0   1.0  0.028544    0.006294      0.0  0.042835  0.349079   \n",
       "65019  3593194.0   1.0  0.164264    0.011529      0.0  0.326641  0.433107   \n",
       "65207  3593194.0   1.0  0.096051    0.000171      0.0  0.344935  0.618260   \n",
       "65605  3593194.0   1.0  0.094034    0.006294      0.0  0.031752  0.349079   \n",
       "65767  3593194.0   1.0  0.097426    0.000171      0.0  0.114251  0.618260   \n",
       "65884  3593194.0   1.0  0.026427    0.006294      0.0  0.063803  0.349079   \n",
       "66017  3593194.0   1.0  0.097855    0.006294      0.0  0.042370  0.349079   \n",
       "\n",
       "       morning  midday  afternoon  evening  midnight  p_nearby_leisure  \\\n",
       "11388      0.0     1.0        0.0      0.0       0.0          0.340278   \n",
       "64538      0.0     1.0        0.0      0.0       0.0          0.346873   \n",
       "64882      0.0     1.0        0.0      0.0       0.0          0.203703   \n",
       "64907      0.0     1.0        0.0      0.0       0.0          0.302346   \n",
       "65019      0.0     0.0        0.0      0.0       0.0          0.354306   \n",
       "65207      0.0     1.0        0.0      0.0       0.0          0.227978   \n",
       "65605      0.0     1.0        0.0      0.0       0.0          0.441323   \n",
       "65767      0.0     1.0        0.0      0.0       0.0          0.320140   \n",
       "65884      0.0     1.0        0.0      0.0       0.0          0.290084   \n",
       "66017      0.0     1.0        0.0      0.0       0.0          0.414942   \n",
       "\n",
       "       p_nearby_food  p_nearby_shops  p_nearby_pickup  p_nearby_education  \\\n",
       "11388       0.152778        0.333333         0.048611            0.034722   \n",
       "64538       0.184670        0.312273         0.044758            0.028868   \n",
       "64882       0.209151        0.487691         0.029738            0.044771   \n",
       "64907       0.203404        0.338682         0.027546            0.056626   \n",
       "65019       0.254211        0.245280         0.048395            0.047887   \n",
       "65207       0.042069        0.634687         0.005283            0.054706   \n",
       "65605       0.151865        0.174670         0.014745            0.129983   \n",
       "65767       0.132926        0.387372         0.040841            0.038306   \n",
       "65884       0.146382        0.376714         0.034290            0.067397   \n",
       "66017       0.144686        0.218578         0.023968            0.107915   \n",
       "\n",
       "       p_nearby_health  \n",
       "11388         0.090278  \n",
       "64538         0.082558  \n",
       "64882         0.024946  \n",
       "64907         0.071396  \n",
       "65019         0.049920  \n",
       "65207         0.035277  \n",
       "65605         0.087414  \n",
       "65767         0.080415  \n",
       "65884         0.085133  \n",
       "66017         0.089910  "
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# view new data\n",
    "oversampled_X_train.loc[oversampled_X_train['id_trip'] == 3593194].head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [],
   "source": [
    "oversampled_training_ids = oversampled_X_train['id_trip']\n",
    "oversampled_X_train.drop('id_trip',axis=1,inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "all_train = pd.concat([oversampled_X_train, pd.DataFrame(oversampled_y_train, columns=['purpose'])],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [],
   "source": [
    "## shuffle data\n",
    "all_train = sklearn.utils.shuffle(all_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mode</th>\n",
       "      <th>duration</th>\n",
       "      <th>distance_m</th>\n",
       "      <th>weekday</th>\n",
       "      <th>precip</th>\n",
       "      <th>temp</th>\n",
       "      <th>morning</th>\n",
       "      <th>midday</th>\n",
       "      <th>afternoon</th>\n",
       "      <th>evening</th>\n",
       "      <th>midnight</th>\n",
       "      <th>p_nearby_leisure</th>\n",
       "      <th>p_nearby_food</th>\n",
       "      <th>p_nearby_shops</th>\n",
       "      <th>p_nearby_pickup</th>\n",
       "      <th>p_nearby_education</th>\n",
       "      <th>p_nearby_health</th>\n",
       "      <th>purpose</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>60253</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.115094</td>\n",
       "      <td>0.006827</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000045</td>\n",
       "      <td>0.745640</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.412371</td>\n",
       "      <td>0.164948</td>\n",
       "      <td>0.216495</td>\n",
       "      <td>0.010309</td>\n",
       "      <td>0.113402</td>\n",
       "      <td>0.082474</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16084</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.062958</td>\n",
       "      <td>0.022514</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0.411628</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.157895</td>\n",
       "      <td>0.105263</td>\n",
       "      <td>0.578947</td>\n",
       "      <td>0.052632</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.105263</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16332</th>\n",
       "      <td>2.0</td>\n",
       "      <td>0.219320</td>\n",
       "      <td>0.181909</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.045443</td>\n",
       "      <td>0.396224</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12041</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.125634</td>\n",
       "      <td>0.013861</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.948786</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.297872</td>\n",
       "      <td>0.191489</td>\n",
       "      <td>0.382979</td>\n",
       "      <td>0.021277</td>\n",
       "      <td>0.042553</td>\n",
       "      <td>0.063830</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38853</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.022176</td>\n",
       "      <td>0.001063</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.753750</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.300000</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.128571</td>\n",
       "      <td>0.114286</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.028571</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       mode  duration  distance_m  weekday    precip      temp  morning  \\\n",
       "60253   1.0  0.115094    0.006827      1.0  0.000045  0.745640      0.0   \n",
       "16084   1.0  0.062958    0.022514      1.0  0.000031  0.411628      0.0   \n",
       "16332   2.0  0.219320    0.181909      1.0  0.045443  0.396224      0.0   \n",
       "12041   0.0  0.125634    0.013861      1.0  0.000000  0.948786      0.0   \n",
       "38853   0.0  0.022176    0.001063      1.0  0.000000  0.753750      0.0   \n",
       "\n",
       "       midday  afternoon  evening  midnight  p_nearby_leisure  p_nearby_food  \\\n",
       "60253     0.0        0.0      1.0       0.0          0.412371       0.164948   \n",
       "16084     0.0        0.0      1.0       0.0          0.157895       0.105263   \n",
       "16332     0.0        0.0      1.0       0.0          1.000000       0.000000   \n",
       "12041     0.0        1.0      0.0       0.0          0.297872       0.191489   \n",
       "38853     0.0        0.0      1.0       0.0          0.300000       0.428571   \n",
       "\n",
       "       p_nearby_shops  p_nearby_pickup  p_nearby_education  p_nearby_health  \\\n",
       "60253        0.216495         0.010309            0.113402         0.082474   \n",
       "16084        0.578947         0.052632            0.000000         0.105263   \n",
       "16332        0.000000         0.000000            0.000000         0.000000   \n",
       "12041        0.382979         0.021277            0.042553         0.063830   \n",
       "38853        0.128571         0.114286            0.000000         0.028571   \n",
       "\n",
       "       purpose  \n",
       "60253        4  \n",
       "16084        1  \n",
       "16332        0  \n",
       "12041        2  \n",
       "38853        0  "
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [],
   "source": [
    "oversampled_y_train = all_train['purpose']\n",
    "oversampled_X_train = all_train.drop('purpose',axis=1)\n",
    "\n",
    "## flatten data i.e. from Pd.Series to np.array\n",
    "oversampled_y_train = np.ravel(oversampled_y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Random Forest Classifcation accuracy: 0.5040508665777869\n",
      "CPU times: user 26.5 s, sys: 526 ms, total: 27 s\n",
      "Wall time: 28.2 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "over_rf_clf, over_rf_score, over_rf_preds = run_rf(oversampled_X_train, X_test, oversampled_y_train, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "predictions for each class by RF: Counter({0: 3476, 2: 2559, 1: 1492, 4: 958, 5: 659, 3: 607}) \n",
      "\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.54      0.61      0.57      3096\n",
      "           1       0.42      0.37      0.40      1701\n",
      "           2       0.55      0.53      0.54      2681\n",
      "           3       0.31      0.25      0.28       770\n",
      "           4       0.60      0.65      0.62       888\n",
      "           5       0.34      0.37      0.35       615\n",
      "\n",
      "    accuracy                           0.50      9751\n",
      "   macro avg       0.46      0.46      0.46      9751\n",
      "weighted avg       0.50      0.50      0.50      9751\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print('predictions for each class by RF:', collections.Counter(over_rf_preds), '\\n')\n",
    "# {'leisure': 0, 'food_drink': 1, 'shops': 2,\n",
    "# 'pick_up_drop_off': 3, 'education': 4, 'health': 5}\n",
    "print(sklearn.metrics.classification_report(y_test, over_rf_preds))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = pd.concat([oversampled_X_train,X_test]).reset_index()\n",
    "b = pd.concat([pd.DataFrame(oversampled_y_train, columns=['purpose']), \\\n",
    "                                pd.DataFrame(y_test, columns=['purpose'])]).reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [],
   "source": [
    "shuffled_X, shuffled_y = shuffle_data(a,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [],
   "source": [
    "rf_cv_scores = sklearn.model_selection.cross_val_score(rf_clf,shuffled_X, np.ravel(shuffled_y), cv=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.72091363, 0.72280055, 0.71899352, 0.72014992, 0.72123051])"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf_cv_scores"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# under-sampling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [],
   "source": [
    "rus = RandomUnderSampler(random_state=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [],
   "source": [
    "undersampled_X_train, undersampled_y_train = rus.fit_resample(X_train_with_ID, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[4.55919000e+05, 0.00000000e+00, 1.17177222e-01, ...,\n",
       "        4.80000000e-01, 1.60000000e-01, 0.00000000e+00],\n",
       "       [3.43192200e+06, 1.00000000e+00, 5.19639166e-02, ...,\n",
       "        0.00000000e+00, 3.84615385e-02, 0.00000000e+00],\n",
       "       [2.25977700e+06, 1.00000000e+00, 2.73444841e-02, ...,\n",
       "        0.00000000e+00, 4.16666667e-02, 0.00000000e+00],\n",
       "       ...,\n",
       "       [3.23045200e+06, 2.00000000e+00, 2.08043601e-01, ...,\n",
       "        5.26315789e-02, 1.57894737e-01, 1.05263158e-01],\n",
       "       [2.34480000e+04, 3.00000000e+00, 8.64499154e-02, ...,\n",
       "        5.00000000e-02, 4.50000000e-01, 1.00000000e-01],\n",
       "       [1.35555000e+05, 2.00000000e+00, 1.00263108e-01, ...,\n",
       "        0.00000000e+00, 3.33333333e-01, 0.00000000e+00]])"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "undersampled_X_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [],
   "source": [
    "undersampled_X_train = pd.DataFrame(undersampled_X_train, columns=X_train_with_ID.columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [],
   "source": [
    "undersampled_training_ids = undersampled_X_train['id_trip']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [],
   "source": [
    "undersampled_X_train.drop('id_trip',axis=1,inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Random Forest Classifcation accuracy: 0.4355450723002769\n",
      "CPU times: user 4.58 s, sys: 121 ms, total: 4.7 s\n",
      "Wall time: 5.01 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "under_rf_clf, under_rf_score, under_rf_preds = run_rf(undersampled_X_train, X_test,\\\n",
    "                                                                      undersampled_y_train, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "predictions for each class by RF: Counter({0: 2207, 2: 2160, 1: 1671, 3: 1303, 5: 1216, 4: 1194}) \n",
      "\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.56      0.40      0.46      3096\n",
      "           1       0.37      0.37      0.37      1701\n",
      "           2       0.55      0.44      0.49      2681\n",
      "           3       0.24      0.40      0.30       770\n",
      "           4       0.50      0.67      0.57       888\n",
      "           5       0.25      0.48      0.33       615\n",
      "\n",
      "    accuracy                           0.44      9751\n",
      "   macro avg       0.41      0.46      0.42      9751\n",
      "weighted avg       0.47      0.44      0.44      9751\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print('predictions for each class by RF:', collections.Counter(under_rf_preds), '\\n')\n",
    "# {'leisure': 0, 'food_drink': 1, 'shops': 2,\n",
    "# 'pick_up_drop_off': 3, 'education': 4, 'health': 5}\n",
    "print(sklearn.metrics.classification_report(y_test, under_rf_preds))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Problems:\n",
    "1. oversampling doesn't know to estimate one binary for morning, afternoon etc.\n",
    "2. oversampling will affect p_nearby"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [],
   "source": [
    "# fin"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
